package negocio;

import java.io.Serializable;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

import beans.CondicionOperacionBean;
import beans.FinanciacionBean;
import beans.PagoContadoBean;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipo")
public abstract class CondicionOperacion implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1873937474226888479L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Integer id;
	public float porcentaje;

	public CondicionOperacion() {

	}

	public abstract float obtenerValorDeVenta(float monto);

	

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public static CondicionOperacion getPagoContadoFromBean(
			PagoContadoBean pagoContado) {
		PagoContado pc = new PagoContado();
		pc.setPorcentaje(pagoContado.getDescuento());
		return pc;
	}

	public static CondicionOperacion getFinanciacionFromBean(FinanciacionBean fin) {
		Financiacion f = new Financiacion();
		f.setCantidadDias(fin.getCantidadDias());
		f.setPorcentaje(fin.getRecargo());
		return f;
	}

	public static CondicionOperacion getCondicionFromBean(
			CondicionOperacionBean fin) {
		try{
			return getFinanciacionFromBean((FinanciacionBean) fin);
			
		}catch(Exception e){
			return getPagoContadoFromBean((PagoContadoBean) fin);
			
		}
	}

	public float getPorcentaje() {
		return porcentaje;
	}

	public void setPorcentaje(float porcentaje) {
		this.porcentaje = porcentaje;
	}

	public CondicionOperacion(float porcentaje) {
		super();
		this.porcentaje = porcentaje;
	}

	public abstract CondicionOperacionBean getBean();

}
